package dao.implementacao.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import persistencia.BancoDadosManager;

import model.Instituição;
import model.Usuario;

public class InstituiçãoDAO implements IInstituiçãoDAO
{
	private BancoDadosManager bdm;
	private Connection con;
	
	public InstituiçãoDAO()
	{
		bdm = BancoDadosManager.getInstance();
		con = bdm.getConexao();
	}
	
	@Override
	public void addInstituição(Instituição instituição) 
	{	
		 try 
	        {  
			 	String sql = "insert into instituicao(nome,drescricao,endereco,cnpj,login,senha) values(?,?,?,?,?,?)";
			 	PreparedStatement comando = con.prepareStatement(sql);
	            comando.setString(1, instituição.getNome());
	            comando.setString(2, instituição.getDrescricao());
	            comando.setString(3, instituição.getEndereco());
	            comando.setString(4, instituição.getCnpj());
	            comando.setString(5, instituição.getLogin());
	            comando.setString(6, instituição.getSenha());
	            comando.execute();
	            comando.close();
	        } catch (Exception e) 
	        {  
	        	e.printStackTrace();
	        }
	}

	@Override
	public void updateInstituição(Instituição instituição) {
		try 
        {  
		 	String sql = "update instituicao set nome=? , drescricao = ?, endereco = ?, cnpj = ?,login=?,senha=? where cod_ins=?";
		 	PreparedStatement comando = con.prepareStatement(sql);
            comando.setString(1, instituição.getNome());
            comando.setString(2, instituição.getDrescricao());
            comando.setString(3, instituição.getEndereco());
            comando.setString(4, instituição.getCnpj());
            comando.setString(5, instituição.getLogin());
            comando.setString(6, instituição.getSenha());
            comando.setInt(7, instituição.getCodigo());
            comando.execute();
            comando.close();
        } catch (Exception e) 
        {  
        	e.printStackTrace();
        }
	}

	@Override
	public void deleteInstituição(Instituição instituição) {
		try 
        {  
		 	String sql = "delete from instituicao where cod_ins=?";
		 	PreparedStatement comando = con.prepareStatement(sql);
            comando.setInt(1, instituição.getCodigo());
            comando.execute();
            comando.close();
        } catch (Exception e) 
        {  
        	e.printStackTrace();
        }	
	}

	@Override
	public Instituição getInstituiçãoById(int id) {
		
		Instituição retorno = null;
		
		try 
		{		
			String sql = "select * from instituicao where cod_ins ="+id;
			
			Statement s = con.createStatement();	
			ResultSet rs = s.executeQuery(sql);	
			
			if(rs.next()){
				int codigo = rs.getInt("cod_ins");
				String nome = rs.getString("nome");
				String drescricao = rs.getString("drescricao");
				String endereco = rs.getString("endereco");
				String cnpj = rs.getString("cnpj");
				String login = rs.getString("login");
				String senha = rs.getString("senha");
				retorno = new Instituição(codigo,nome,drescricao,endereco,cnpj,login,senha);
			}
			
			s.close();
			rs.close();
			
		} catch (SQLException e) 
		{
			e.printStackTrace();
		}	
		
		return retorno;
	}

	@Override
	public List<Instituição> getInstituições() 
	{
		List<Instituição> instituicao = new ArrayList<Instituição>();
		try 
		{		
			String sql = "select * from instituicao";
			
			Statement s = con.createStatement();	
			ResultSet rs = s.executeQuery(sql);	
			
			while(rs.next())
			{
				int codigo = rs.getInt("cod_ins");
				String nome = rs.getString("nome");
				String drescricao = rs.getString("drescricao");
				String endereco = rs.getString("endereco");
				String cnpj = rs.getString("cnpj");
				String login = rs.getString("login");
				String senha = rs.getString("senha");
				instituicao.add(new Instituição(codigo,nome,drescricao,endereco,cnpj,login,senha));
			}
			
			s.close();
			rs.close();
			
		} catch (SQLException e) 
		{
			e.printStackTrace();
		}	
		
		return instituicao;
	}

	@Override
	public void finalizaConexaoInstituição() {
		try {
			con.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	
	
}
